package com.cskaoyan.checkable;

import java.text.ParseException;

/*
   编译时异常 和 运行时异常第二个区别： 关于异常的抛出
   1. 运行时异常，一旦产生，且没有人处理，jvm会自动将运行时异常向上报告
   2. 编译时异常，要想抛出方法体之外，必须用throws关键字，在方法声明中，来声明可能会抛出该种类型的异常

   throws
        a.在方法定义时使用
        b.声明该方法可能抛出的异常
        b.对于编译时异常，可以在语法层面强制方法调用者处理该异常
        基本语法：
        修饰符  返回值 方法名(形参列表)  throws 异常类型1，异常类型2，异常类型3 {}


        注意事项：
        1. 异常列表之间用逗号分割，列表中出现的异常不要出现包含(父子)关系的异常
           如果，既存在子类异常类型，又存在父类异常类型，编译器只会强制要求处理父类类型异常


 */
public class Demo2 {

    public static void main(String[] args) {
        CompareClass obj = new CompareClass();
        // 调用可能产生运行时异常的方法
        //obj.runtime();


        // 调用可能产生编译时异常的方法
        try {
            obj.checkable();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }



}

class CompareClass {

    /*
        针对运行时异常
     */
    public void runtime() {
        int i = 9;
        // 产生除零异常
        int result = i / 0;
    }

    public void checkable() throws CloneNotSupportedException, ParseException, Exception{

        CompareClass obj = new CompareClass();
        // 可能产生编译时异常
        obj.clone();
    }

}
